热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

表字|班级_Java全栈数据库技术:1.数据库之MysqlL上

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java全栈数据库技术:1.数据库之MysqlL上相关的知识,希望对你有一定的参考价值。第一章数据库概述

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java全栈数据库技术:1.数据库之MysqlL上相关的知识,希望对你有一定的参考价值。



第一章 数据库概述

1.1 数据库概述


  • DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。

  • DB:数据库(Database)

  • SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

  • 如果把数据库比作盘子,那数据就是盘子里的,SQL则是你的筷子

  • 数据库类型:数据库经过几十年的发展,出现了多种类型。目前最常见的数据库模型主要是:关系型数据库和(noSQL)非关系型数据库。

  • mysql:其中的一款关系型数据库管理系统

以下是2020年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:)

关系型数据库模型是将复杂的数据结构用较为简单的二元关系(二维表)来表示,如图所示。在该类型数据库中,对数据的操作基本上都建立在一个或多个表格上,我们可以采用结构化查询语言(SQL)对数据库进行操作。关系型数据库是目前主流的数据库技术,其中具有代表性的数据库管理系统有:Oracle、DB2、SQL Server、MySQL等。

非关系型数据库:

随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS( 社交网络服务 )类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 例如:redis MongoDB


关系型数据库设计规则


  • 遵循ER模型


    • E entity 代表实体的意思 对应到数据库当中的一张表
    • R relationship 代表关系的意思
  • 具体体现


    • 将数据放到表中,表再放到库中。
    • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
    • 表具有一些特性,这些特性定义了数据在表中如何存储,类似java和python中 “类”的设计。
    • 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和字段名。每个字段类似java 或者python中的“实例属性”。
    • 表中的数据是按行存储的,一行即为一条记录。每一行类似于java或python中的“对象”。


1.2 MySQL概述

MySQL数据库最初是由瑞典MySQL AB公司开发,2008年1月16号被Sun公司收购。2009年,SUN又被Oracle收购。MySQL是目前IT行业最流行的开放源代码的数据库管理系统,同时它也是一个支持多线程高并发多用户的关系型数据库管理系统。MySQL之所以受到业界人士的青睐,主要是因为其具有以下几方面优点:


1. 开放源代码

MySQL最强大的优势之一在于它是一个开放源代码的数据库管理系统。开源的特点是给予了用户根据自己需要修改DBMS的自由。MySQL采用了General Public License,这意味着授予用户阅读、修改和优化源代码的权利,这样即使是免费版的MySQL的功能也足够强大,这也是为什么MySQL越来越受欢迎的主要原因。


2. 跨平台

MySQL可以在不同的操作系统下运行,简单地说,MySQL可以支持Windows系统、UNIX系统、Linux系统等多种操作系统平台。这意味着在一个操作系统中实现的应用程序可以很方便地移植到其他的操作系统下。


3. 轻量级

MySQL的核心程序完全采用多线程编程,这些线程都是轻量级的进程,它在灵活地为用户提供服务的同时,又不会占用过多的系统资源。因此MySQL能够更快速、高效的处理数据。


4. 成本低

MySQL分为社区版和企业版,社区版是完全免费的,而企业版是收费的。即使在开发中需要用到一些付费的附加功能,价格相对于昂贵的Oracle、DB2等也是有很大优势的。其实免费的社区版也支持多种数据类型和正规的SQL查询语言,能够对数据进行各种查询、增加、删除、修改等操作,所以一般情况下社区版就可以满足开发需求了,而对数据库可靠性要求比较高的企业可以选择企业版。


1.3 Mysql软件的卸载、安装和配置

不讲解,用到时百度搜索就行


第二章 MySQL的使用

2.1 MySQL服务的启动

“我的电脑/计算机”–>右键–>“管理”–>“服务”–>启动和关闭MySQL服务

“开始菜单”–>“控制面板”–>“管理工具”–>“服务”–>启动和关闭MySQL

“任务管理器”–>“服务”–>启动和关闭MySQL

或者

命令行(使用命令行的前提需要配置mysql的环境变量)

net start MySQL服务名
net stop MySQL服务名

2.2 客户端连接MySQL

1、命令行客户端:

mysql -h 主机IP地址 -P 端口号 -u 用户名 -p回车
Enter Password:密码


如果访问本机,-h localhost可以省略


如果端口号没有修改,-P 3306可以省略


除了-p与密码之间不要空格外,其他的-h,-P,-u与后面的参数值之间可以有空格


想要连接成功,必须保证服务开启的


2、其他客户端,例如:可视化工具Navicat或SQLyog等


第三章 MySQL数据类型和运算符

3.1 MySQL数据类型


1、数值类型


  • 整型系列:xxxInt3


int(M),必须和unsigned zerofill一起使用才有意义


* 1个字节(byte) = 8比特(bit),可以表示256个数。一个bit就是一位二进制数
* TINYINT:有符号(-128~127);无符号(0~255)
* 其他类似
* int(4)字段仍然可以接收超过4位的整数,因为mysql默认使用的是有符号类型。而在有符号类型的字段中,整数类型设置的宽度不生效。
* int(M),必须和`unsigned zerofill`一起使用才有意义。unsigned zerofill表示无符号字段,不符合要求的地方以0填充,例如:宽度为3,数值为10,则显示为010.当然还是可以接收超过3位的整数

  • 浮点型系列:float,double(或real)


double(M,D):表示最长为M位,其中小数点后D位


例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。



  • 定点型系列:decimal(底层实际上是使用字符串进行存储)


decimal(M,D):表示最长为M位,其中小数点后D位
如果decimal没有指定宽度,则只保留整数,且会对小数四舍五入
如果指定了宽度,则按宽度输出,多出的小数也会按照四舍五入



  • 位类型:bit

字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1) 将传入的数值转为二进制存入

用来存储二进制数。对于位字段,直接使用select命令将不会看到结果。可以使用bit()函数进行插入。插入bit类型字段时,使用bit()函数转为二进制值再插入,使用bin()函数进行读取。


2、日期时间类型

日期时间类型:year, date, datetime, timestamp



注意一下每一种日期时间的表示范围


timestamp和datetime的区别:


  • timestamp范围比较小

  • timestamp和时区有关


    • show variables like ‘time_zone’;
    • set time_zone = ‘+9:00’;
  • 表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间


案例:

create table test2(time1 datetime,time2 timestamp); # 创建表
insert into test2 values(now(),now()); # 插入数据
select * from test2; // 查询数据
+---------------------+---------------------+
| time1 | time2 |
+---------------------+---------------------+
| 2021-11-26 02:09:52 | 2021-11-26 02:09:52 |
+---------------------+---------------------+
1 row in set (0.01 sec)
insert into test2 values(null,null);
select * from test2;
+---------------------+---------------------+
| time1 | time2 |
+---------------------+---------------------+
| 2021-11-26 02:09:52 | 2021-11-26 02:09:52 |
| NULL | NULL |
+---------------------+---------------------+
# 修改时区
set time_zone="+9:00";
select * from test2;
+---------------------+---------------------+
| time1 | time2 |
+---------------------+---------------------+
| 2021-11-26 02:09:52 | 2021-11-26 11:09:52 | # 修改时区后,timestamp日期类型的数据也会自动改变。datetime类型的不会
| NULL | NULL |
+---------------------+---------------------+

3、字符串类型

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。常见的有:

char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等

在mysql中,单引号和双引号都表示字符串


  • 字符串类型char,varchar(M)


char如果没有指定宽度,默认为1个字符。定长字符串


varchar(M),必须指定宽度。可变字符串



  • binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串,不支持模糊查询之类的。

  • 一般在保存少量字符串的时候,我们会选择char和varchar;而在保存较大文本时,通常会选择使用text或blob系列。blob和text值会引起一些性能问题,特别是在执行了大量的删除操作时,会在数据表中留下很大的“空洞”,为了提高性能,建议定期时候用optimize table功能对这类表进行碎片整理。可以使用合成的(Synthetic)索引来提高大文本字段的查询性能,如果需要对大文本字段进行模糊查询,MySql提供了前缀索引。但是仍然要在不必要的时候避免检索大型的blob或text值。

  • enum枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储;对于255`65535个成员需要2个字节存储。例如:gender enum(‘男’,‘女’)。一次只能从枚举值中选择一个。

  • set集合类型,可以包含0~64个成员。一次可以从集合中选择多个成员。如果选择了1-8个成员的集合,占1个字节,依次占2个,3个。。8个字节。例如:hoppy set(‘吃饭’,‘睡觉’,‘玩游戏’,‘旅游’),选择时’吃饭,睡觉’或’睡觉,玩游戏,旅游’


4、示例

+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| eid | int(11) | NO | PRI | NULL | auto_increment |
| ename | varchar(20) | NO | | NULL | |
| tel | char(11) | NO | | NULL | |
| gender | char(1) | YES | || |
| salary | double | YES | | NULL | |
| commission_pct | double(3,2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| job_id | int(11) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| mid | int(11) | YES | | NULL | |
| address | varchar(150) | YES | | NULL | |
| native_place | varchar(10) | YES | | NULL | |
| did | int(11) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
# char varchar练习
create table test2(
name1 char, # 未指定宽度,则只能放一个字符
name2 char(20), # 指定宽度时,与varchar一样。都可以存放宽度以内的字符串,但是char底层是定长的,即只放2个字符底层仍然会占用20个字符的空间
name3 varchar(20) # 必须指定宽度,底层是可变的,即存放多少字符就占用多少空间。只要不超过宽度
);
insert into test2 values("男","嘿嘿","哈哈哈");
select * from test2;
+-------+--------+-----------+
| name1 | name2 | name3 |
+-------+--------+-----------+
|| 嘿嘿 | 哈哈哈 |
+-------+--------+-----------+
# enum练习
create table test2(
sex enum("男","女","不男不女") # 只能在待选项中选择一个值
);
insert into test2 values("不男不女");
select * from test2;
+--------------+
| sex |
+--------------+
| 不男不女 |
+--------------+
insert into test2 values("公");
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
# set练习
create table test2(
// 1.可以选择集合中的一个或多个待选项
// 2.也可以使用数字选择待选项,从左到右依次是1,2,4,8,...(如果是5则表示:第一个和第三个待选项)
habby set("吃饭","睡觉","玩游戏","运动")
);
insert into test2 values("吃饭");
insert into test2 values("吃饭,睡觉");
select * from test2;
+---------------+
| habby |
+---------------+
| 吃饭 |
| 吃饭,睡觉 |
+---------------+
insert into test2 values(4); # 选择第三个待选项
insert into test2 values(12); # 选择第三、第四个待选项。(12=4+8)
select * from test2;
+------------------+
| habby |
+------------------+
| 吃饭 |
| 吃饭,睡觉 |
| 玩游戏 |
| 玩游戏,运动 |
+------------------+

3.2 数据库编码方式

1.查看当前数据库的编码方式

show variables like 'character%';


2.指定编码方式创建数据库

create database 数据库名 CHARSET "utf8";

3.一劳永逸的解决编码问题

1.找到数据库安装目录下的my.ini文件
2.将ini文件中的`default-character-set`设置为`utf8`
3.将ini文件下的`character-set-server`改为`utf8`

第四章 SQL

4.1 MySQL的语法规范和要求

(1)mysql的sql语法不区分大小写



MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。


show variables like "coll%"; // 显示mysql的校验规则,查看数据值是否区分大小写
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8mb4_0900_ai_ci |
+----------------------+--------------------+
/**
\\_ci(大小写不敏感),\\_cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)
*/

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号

(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来

(4)数据库和表名、字段名等对象名中间不要包含空格

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

(6)标点符号:



必须成对


必须英文状态下半角输入方式


字符串和日期类型可以使用单引号’’


列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略


如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略。


(7)SQL脚本中如何加注释



单行注释:#注释内容


单行注释:–空格注释内容 其中–后面的空格必须有


多行注释:/* 注释内容 */


#以下两句是一样的,不区分大小写
show databases;
SHOW DATABASES;
#创建表格
#create table student info(...); #表名错误,因为表名有空格
create table student_info(...);
#其中name使用``飘号,因为name和系统关键字或系统函数名等预定义标识符重名了。
CREATE TABLE t_stu(
id INT,
`name` VARCHAR(20)
);
select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略
select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略""
select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

4.2 SQL分类

DDL (Data Definition Language) :数据定义语言,定义库,表结构等,包括create,drop,alter等

DML (Data Manipulation Language) :数据操作语言,增删改查数据,包括insert,delete,update,select等

DQL(Data query Language):数据查询语言 select

DCL(Data Control Language) :数据控制语言,权限,事务等管理。


4.3 DDL(v1.0)

1、查看所有数据库

show databases;

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
5 rows in set (0.01 sec)

2、指定使用某个数据库

use 数据库名;

mysql> use test1;
Database changed

3、创建数据库

create database 数据库名;
create database 数据库名 charset 'utf8'; #在mysql中字符集名称不要使用utf-8
create database 数据库名 charset 'gbk';

create database test2;
Query OK, 1 row affected (0.02 sec)

4、删除数据库

drop database 数据库名;

mysql> drop database test2;
Query OK, 0 rows affected (0.02 sec)

5、查看某个库下的所有表格

show tables ; #前提是前面有use 数据库名;的语句
show tables from 数据库名;

mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| test1 |
| test2 |
+-----------------+
2 rows in set (0.01 sec)

6、创建表格

create table 【数据名.】表名(
字段名1 数据类型,
字段名2 数据类型,
....
);

create table stu(
id int,
name varchar(10)
);

7、删除表格

drop table 【数据库名.]表名称;

mysql> drop table test2;
Query OK, 0 rows affected (0.04 sec)

8、查看某个表结构

describe 【数据库名.]表名称;
desc 【数据库名.]表名称;

mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

9、增加一列

alter table 【数据库名.]表名称 add 【column】 字段名 数据类型;
alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 first;
alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 after 另一个字段;

mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
alter table stu add school char(10); # 默认增加到末尾列
alter table stu add sex enum("男","女") first; # 增加到第一列
alter table stu add age int after id; # 增加到id字段后面
mysql> desc stu;
+--------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------------+------+-----+---------+-------+
| sex | enum('男','女') | YES | | NULL | |
| id | int | YES | | NULL | |
| age | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| school | char(10) | YES | | NULL | |
+--------+-------------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

10、删除一列

alter table 【数据库名.]表名称 drop 【column】 字段名;

alter table stu drop school; # 删除school列字段
mysql> desc stu;
+-------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+-------+
| sex | enum('男','女') | YES | | NULL | |
| id | int | YES | | NULL | |
| age | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

11、修改列数据类型

alter table 【数据库名.]表名称 modify 【column】 字段名 新数据类型;

alter table stu modify name char(6); # 修改name字段数据类型
mysql> desc stu;
+-------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+-------+
| sex | enum('男','女') | YES | | NULL | |
| id | int | YES | | NULL | |

推荐阅读
  • 本文介绍了在 Spring Boot 中使用 JPA 进行数据删除操作时遇到的 SQL 错误及其解决方法。错误表现为:删除操作失败,原因是无法打开 JPA EntityManager 以进行事务处理。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 为了确保数据库的高效运行,本文介绍了一种方法,通过编写定时任务脚本来自动清理 `order` 表中状态为 0 或为空的无效订单记录。该脚本使用 PHP 编写,并设置时区为中国标准时间,每 10 分钟执行一次,以保持数据库的整洁和性能优化。此外,还详细介绍了如何配置定时任务以及脚本的具体实现步骤。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
author-avatar
手机用户2602929277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有